#include "arraystudy.h"
#include <iostream>
using namespace std;


ArrayStudy::ArrayStudy()
{

}

void ArrayStudy::show(){
    cout << endl << endl;
    cout << "数组==============================================="<< endl;

    // 数组的定义：类型 数组名称[长度]
//    int a;
    int arr[10];  // 一维数组
    for(int i = 0; i < 10; i++){
        cout << arr[i] << endl;
    }

    // 初始化部分数组元素值
    cout << endl;
    int arr2[10] = {0, 1, 2};  // 一维数组
    for(int i = 0; i < 10; i++){
        cout << arr2[i] << endl;
    }

    //先定义，后赋值一部分
    cout << endl;
    int arr3[10];  // 一维数组
    arr3[0] = 100;
    for(int i = 0; i < 10; i++){
        cout << arr3[i] << endl;
    }

    // 数组是相同类型的数据连续存储到内存中；数组在内存中的地址其实是数组元素起始值的地址；
    int atest[3] = {100, 200, 300};
    cout << "数组atest的内存地址：" << (long long)(&atest) << endl;
    cout << "数组atest第一个元素的的内存地址：" << (long long)(&(atest[0]))
       << endl;


    // 二维数组是一种特殊的数组，它可以理解为元素为一维数组的数组。在C++中，通过使用两个方括号表示，如array[row][column]，来访问和操作二维数组的元素
    cout << endl << endl;
    cout << "二维数组===========================================" << endl;
    // 定义：   类型 数组名称[二维数组的长度][一维数组的长度]

    int n[2][3] = {{1, 2, 3}, {3, 4, 5}};

    for (int i = 0; i < 2; i++) {
        cout << endl;  // 换行
        for (int j = 0; j < 3; j++) {
          cout << "\t" << n[i][j];
        }
    }

    cout << endl << endl;
    cout << "==================" << endl;

    // 排序--冒泡排序
    {
        int numl[5] = {5, 3, 1, 2, 4};
        int numl_length = sizeof (numl)/sizeof(int);
        cout << "length numl: " << numl_length << endl;


        for(int i=0; i < numl_length; i++){
            for(int j=i+1; j < numl_length; j++){
                if(numl[i] > numl[j]){
                    int temp = numl[i];
                    numl[i] = numl[j];
                    numl[j] = temp;
                }
            }
        }

        for(int i=0; i < numl_length; i++){
            cout << numl[i] << "\t";
        }
        cout << endl;
    }
    
    cout << endl << endl;
    cout << "==================" << endl;

    // 排序--选择排序
    {
        int numl[5] = {5, 3, 1, 2, 4};
        int numl_length = sizeof (numl)/sizeof(int);
        cout << "length numl: " << numl_length << endl;
        
        int min;
        int temp;

        for(int i = 0; i < numl_length; i++){
            min = i;
            for(int j=i+1; j<numl_length; j++){
                if(numl[j] < numl[min]){
                    min = j;
                }
            }

            temp = numl[i];
            numl[i] = numl[min];
            numl[min] = temp;
        }

        for(int i=0; i < numl_length; i++){
            cout << numl[i] << "\t";
        }
        cout << endl;
    }

    cout << endl << endl;
    cout << "==================" << endl;

    // 假设一个班级有n个学生，m门课程，需要统计每个学生的总分和平均分，并输出。
   // 要求用二维数组来解决这个问题；
    {
        int stu_array[4][3] = {{95,97,98},
                     {88,90,100},
                     {98,99,100},
                     {88,95,97}};

        int sum;
        double average;
        for(int i=0; i<4; i++){
            sum = 0;
            for(int j=0; j<3; j++){
                cout << "学生 " << i << " 成绩" << j << ":" <<stu_array[i][j] << ";\t";
                sum += stu_array[i][j];
            }
            average = sum/3;
            cout << endl <<"学生 " << i << "总分" << sum << ";\t" << "平均分: " << average << endl;
        }


    }



}
